
 1000  *SAVE S.B700-B7FF DOS 3.3
 1010  *---------------------------------
 1020  FMP.SUBCOD .EQ $B5BC
 1030  FMW.VOLUME .EQ $B5F9
 1040  RWTS       .EQ $BD00
 1050  *---------------------------------
 1060  INSTALL
 1070         LDY #0       COPY NEW CODE INTO DOS
 1080  .1     LDA NEW.B700,Y    $B700...B7FF
 1090         STA $B700,Y
 1100         INY
 1110         BNE .1
 1120         LDA #8       PATCH TO INCLUDE TRACK 2
 1130         STA $AEB3    AS FREE SPACE
 1140         RTS
 1150  *---------------------------------
 1160  NEW.B700  .PH $B700
 1170  *--------------------------------
 1180  BOOT.STAGE2
 1190         STX IOB.SLOT16
 1200         STX IOB.PRVSLT
 1210         TXA          SLOT*16
 1220         LSR          GET SLOT #
 1230         LSR
 1240         LSR
 1250         LSR
 1260         TAX          X = SLOT NUMBER
 1270  *---COPY BB00-FF TO 9D00-FF------
 1280         LDY #0
 1290  .1     LDA $BB00,Y
 1300         STA $9D00,Y
 1310         DEY
 1320         BNE .1
 1330  *---SET CURRENT TRACKS @ 0-------
 1340         TYA          A = Y = 0
 1350         STA $4F8,X
 1360         STA $478,X
 1370  *---BUILD RWFT CALL--------------
 1380         INY          Y = 1
 1390         STY IOB.PRVDRV
 1400         STY IOB.DRIVE     DRIVE = 1
 1410         TYA               A = 1 (READ OPCODE)
 1420         INY               Y = 1 (RWFT INDEX)
 1430         JSR RWFT
 1440  *---COLD START DOS---------------
 1450         LDX #$FF
 1460         TXS          EMPTY STACK
 1470         STX IOB.VOLUME
 1480         JMP $9D84    DOS HARD ENTRY
 1490  *--------------------------------
 1500         .BS $B74A-*       <<<FILLER>>>
 1510  *---------------------------------
 1520  *      WRITE DOS IMAGE ON TRACKS 0-2
 1530  *---------------------------------
 1540  WRITE.DOS.IMAGE
 1550         LDA #2       WRITE OPCODE FOR RWTS
 1560         LDY #0       RWFT INDEX
 1570  *--------------------------------
 1580  *   READ/WRITE FROM TABLE
 1590  *--------------------------------
 1600  RWFT
 1610         STA IOB.OPCODE
 1620  .1     STY RWFT.INDEX
 1630         LDA RWFT.ADDR,Y
 1640         BEQ .3       ...END OF RWFT TABLE
 1650         STA IOB.BUFFER+1
 1660         LDA RWFT.TRACK,Y
 1670         STA IOB.TRACK
 1680         LDA RWFT.SECTOR,Y
 1690         STA IOB.SECTOR
 1700         LDA RWFT.COUNT,Y
 1710         STA RWFT.N
 1720  .2     LDA /IOB
 1730         LDY #IOB
 1740         JSR ENTER.RWTS
 1750         BCS .2       ...TRY AGAIN IF ERROR
 1760         DEC IOB.SECTOR    NEXT SECTOR
 1770         DEC IOB.BUFFER+1  NEXT PAGE
 1780         DEC RWFT.N
 1790         BNE .2
 1800         LDY RWFT.INDEX
 1810         INY
 1820         BNE .1       ...ALWAYS
 1830  .3     RTS
 1840  *--------------------------------
 1850  RWFT.N     .BS 1
 1860  RWFT.INDEX .BS 1
 1870  *--------------------------------
 1880  RWFT.ADDR   .HS BF.9D.A3.B3.00
 1890  RWFT.TRACK  .HS 00.00.00.01
 1900  RWFT.SECTOR .HS 09.05.0F.0F
 1910  RWFT.COUNT  .HS 0A.01.06.10
 1920  *--------------------------------
 1930         .BS $B7B5-*       <<<FILLER>>>
 1940  *---------------------------------
 1950  *      ENTER RWTS
 1960  *---------------------------------
 1970  ENTER.RWTS
 1980         PHP          SAVE STATUS ON STACK
 1990         SEI          DISABLE INTERRUPTS
 2000         JSR RWTS     CALL RWTS
 2010         BCS .1       ERROR RETURN
 2020         PLP          RESTORE STATUS
 2030         CLC          SIGNAL NO RWTS ERROR
 2040         RTS          RETURN TO CALLER
 2050  .1     PLP          RESTORE STATUS
 2060         SEC          SIGNAL RWTS ERROR
 2070         RTS          RETURN TO CALLER
 2080  *---------------------------------
 2090  *      SET UP RWTS TO WRITE DOS
 2100  *---------------------------------
 2110  SETUP.WRITE.DOS
 2120         LDA FMP.SUBCOD  IMAGE ADDRESS
 2130         STA IOB.BUFFER+1
 2140         LDA #0
 2150         STA IOB.BUFFER
 2160         LDA FMW.VOLUME  VOLUME #
 2170         EOR #$FF        UNCOMPLEMENT IT
 2180         STA IOB.VOLUME
 2190         RTS
 2200  *---------------------------------
 2210  *      CLEAR 256 BYTES STARTING AT ($42,43)
 2220  *---------------------------------
 2230  ZERO.CURRENT.BUFFER
 2240         LDA #0
 2250         TAY
 2260  .1     STA ($42),Y
 2270         INY
 2280         BNE .1
 2290         RTS
 2300  *---------------------------------
 2310         .BS $B7E8-*       <<<FILLER>>>
 2320  *---------------------------------
 2330  *      IOB FOR RWTS CALLS
 2340  *---------------------------------
 2350  IOB
 2360  IOB.TYPE   .HS 01   0--MUST BE $01
 2370  IOB.SLOT16 .HS 60   1--SLOT # TIMES 16
 2380  IOB.DRIVE  .HS 01   2--DRIVE # (1 OR 2)
 2390  IOB.VOLUME .HS 00   3--DESIRED VOL # (0 MATCHES ANY)
 2400  IOB.TRACK  .BS 1    4--TRACK # (0 TO 34)
 2410  IOB.SECTOR .BS 1    5--SECTOR # (0 TO 15)
 2420  IOB.PNTDCT .DA DCT  6--ADDRESS OF DCT
 2430  IOB.BUFFER .BS 2    8--ADDRESS OF DATA
 2440  IOB.SECTSZ .DA 256 10--# BYTES IN A SECTOR
 2450  IOB.OPCODE .BS 1   12--0=SEEK, 1=READ, 2=WRITE, OR 4=FORMAT
 2460  IOB.ERROR  .BS 1   13--ERROR CODE: 0, 8, 10, 20, 40, 80
 2470  IOB.ACTVOL .BS 1   14--ACTUAL VOLUME # FOUND
 2480  IOB.PRVSLT .HS 60  15--PREVIOUS SLOT #
 2490  IOB.PRVDRV .HS 01  16--PREVIOUS DRIVE #
 2500             .BS 2
 2510  DCT    .HS 0001EFD8
 2520         .BS 1
 2530  *--------------------------------

